#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
文献筛选程序
根据JCR分区和中科院分区筛选RIS格式的文献
"""

import argparse
import sys
import os
from pathlib import Path
from literature_filter import LiteratureFilter
from config import EASYSCHOLAR_API_KEY

def main():
    """主函数"""
    parser = argparse.ArgumentParser(
        description='根据期刊分区筛选RIS格式的文献',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
使用示例:
  python main.py input.ris                           # 使用默认输出文件名
  python main.py input.ris -o output.ris             # 指定输出文件名
  python main.py input.ris --api-key YOUR_API_KEY    # 指定API密钥
  python main.py input.ris --stats                   # 显示统计信息
        """
    )
    
    parser.add_argument('input_file', help='输入的RIS文件路径')
    parser.add_argument('-o', '--output', help='输出的RIS文件路径')
    parser.add_argument('--api-key', help='EasyScholar API密钥')
    parser.add_argument('--stats', action='store_true', help='显示筛选统计信息')
    parser.add_argument('--no-progress', action='store_true', help='不显示进度条')
    
    args = parser.parse_args()
    
    # 标准化路径（处理Windows路径格式）
    input_file = str(Path(args.input_file).resolve())
    output_file = str(Path(args.output).resolve()) if args.output else None
    
    # 检查输入文件是否存在
    if not os.path.exists(input_file):
        print(f"错误: 输入文件 '{input_file}' 不存在")
        sys.exit(1)
    
    # 检查文件扩展名
    if not input_file.lower().endswith('.ris'):
        print("警告: 输入文件可能不是RIS格式")
    
    # 获取API密钥
    api_key = args.api_key or EASYSCHOLAR_API_KEY
    if not api_key:
        print("警告: 未提供EasyScholar API密钥，某些功能可能受限")
        print("请设置环境变量 EASYSCHOLAR_API_KEY 或在命令行中使用 --api-key 参数")
    
    try:
        # 创建筛选器
        filter_tool = LiteratureFilter(api_key)
        
        # 执行筛选
        print("=" * 60)
        print("文献筛选程序")
        print("=" * 60)
        print(f"输入文件: {input_file}")
        if output_file:
            print(f"输出文件: {output_file}")
        # 创建筛选器
        filter_tool = LiteratureFilter(api_key)
        
        # 显示筛选规则
        print(f"筛选规则: 保留SCI {', '.join(filter_tool.keep_sci_quartiles)}区 + 中科院 {', '.join(filter_tool.keep_cas_quartiles)}区")
        if filter_tool.remove_unknown:
            print("删除无法获取分区信息的文献")
        else:
            print("保留无法获取分区信息的文献")
        print("=" * 60)
        
        original_count, filtered_count, filtered_entries = filter_tool.filter_literature(
            input_file, 
            output_file
        )
        
        # 显示结果
        print("\n" + "=" * 60)
        print("筛选结果")
        print("=" * 60)
        print(f"原始文献数量: {original_count}")
        print(f"筛选后数量: {filtered_count}")
        print(f"删除数量: {original_count - filtered_count}")
        print(f"保留比例: {filtered_count/original_count*100:.1f}%" if original_count > 0 else "0%")
        
        # 显示统计信息
        if args.stats and filtered_entries:
            print("\n" + "=" * 60)
            print("分区统计信息")
            print("=" * 60)
            stats = filter_tool.get_filtering_stats(filtered_entries)
            
            print("SCI分区分布:")
            print(f"  Q1: {stats['sci_q1']}")
            print(f"  Q2: {stats['sci_q2']}")
            print(f"  Q3: {stats['sci_q3']}")
            print(f"  Q4: {stats['sci_q4']}")
            print(f"  未知: {stats['sci_unknown']}")
            
            print("\n中科院分区分布:")
            print(f"  Q1: {stats['cas_q1']}")
            print(f"  Q2: {stats['cas_q2']}")
            print(f"  Q3: {stats['cas_q3']}")
            print(f"  Q4: {stats['cas_q4']}")
            print(f"  未知: {stats['cas_unknown']}")
            
            print(f"\n无分区信息: {stats['no_info']}")
        
        print("=" * 60)
        print("筛选完成！")
        
    except KeyboardInterrupt:
        print("\n\n程序被用户中断")
        sys.exit(1)
    except Exception as e:
        print(f"\n程序执行出错: {e}")
        sys.exit(1)

if __name__ == '__main__':
    main() 